Java 25に至る道
BuriKaigi 2026
桜庭祐一
2026-01-10
Javaの作り方
OpenJDK - JDK Project
半年ごとの定期リリース
できたものからリリース
それまでは「この機能ができたらリリース」
Java 26:2026-03-17
LTSはディストリビュータが決める
OpenJDKはあまり関係ない
機能追加はLTSを意識する
Oracle, Red Hat
OpenJDK
Group
Compiler
言語仕様
HotSpot
JVM
Core Libs et al.
Project
Amber
Valhalla
Leyden at al.
JEP(JDK Enhancement Proposal)
提案内容
新機能
機能削除
まずはお試し機能として入る
Preview JEP
言語仕様、コアライブラリ
Experimental JEP
VM
GCの改善など
Incubator JEP
コアライブラリ以外のAPI
HTTP周りなど
Javaの新要素のおおまかな流れ
初心者に優しく
宣言的記法、小さなオブジェクト
関数型プログラミングのパラダイム(Java 21までに入っている)
起動時間短縮
Safety/Integrity
初心者に優しく
ハードルが高い?
約束が多い
説明の難しい概念がある
実行までの道のりが長い
コンパイルが必要
機能
コンパイルを明示しないで実行できる
インポートをモジュール単位で書けるようにした
mainを簡単に書けるように
void main(){IO.println("Hello, World!");}
クラス不要
mainメソッドの簡略化
staticメソッドでもなくなった
標準入出力クラス
宣言的記法、小さなオブジェクト
Java 8:Project Lambdaからの流れ
文から式へ
手続型から宣言型へ
少数のミュータブルな大きなオブジェクトから多数のイミュータブルな小さなオブジェクトへ
Value Classes and Objectsへの布石
Stream Gatherers
Compact Object Headers
Stream Gatherers
中間操作の拡充
Collectorのような動作が可能になった
状態を持てるようになった
移動平均の計算など
Compact Object Headers - Project Lilliput
ヒープのオブジェクトヘッダーのサイズが侮れない
起動時間の短縮 - Project Leyden(Leyden:コンデンサー)
コンテナ、サーバレスの世界:VMは起動時間がボトルネック
やること
起動時間短縮
ピークパフォーマンスに至る時間の短縮
プロファイルをして最適化するフローを短縮する
フットプリント削減
具体的なJEP
クラスロード後のイメージをキャッシュ化
Ahead-of-Time cache(AoT)
Ahead-of-Time Method Profiling
Profileする
よく呼ばれる処理はJIT
ループの展開など
=> Profilingに時間がかかるので、Profiling結果だけをcacheする
ネイティブコンパイラの実行時最適化は少し弱い
Ahead-of-Time Code Compilation(導入時期未定)
ネイティブイメージ作成
GraalVMはトーンダウン気味 => JVMを速くする
Safety/Integrity
安全性の追求は常に
セキュリティ関連 API
ポスト量子暗号の対応など
保守できない機能の削除
32bit Windowsポーティング削除
互換性を少し犠牲にしている
デフォルト動作の変更
JNI使用時に警告、今後は原則禁止
FMM, リフレクション
まとめ
長い目で見るとJavaの方向性がわかる
力を入れているところ
これから向かおうとしているところ
時代が変わればプログラミングスタイルも変わる